package com.yangfei.mystudy1020.utils;

import android.app.Activity;
import android.content.Context;

import junit.framework.Assert;

import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;

public class DetectThread extends Thread {
    WeakReference<Activity> weakref;
    ReferenceQueue<Activity> queue;

    public DetectThread(Context ctx, String name){
        super(name);
        //用一个弱引用指向这个activity，并且关联到弱引用序列，我的意思是关联。怎么关联法？
        // 这个是java的基础，你去搜下WeakReferenceQueue ，当WeakReference所指对象没有强引用时，WeakReference就是被放到这个WeakReferenceQueue 序列
        queue = new ReferenceQueue();
        weakref = new WeakReference(ctx, queue);

//        Object obj = null;
//        obj = queue.poll();
//        Assert.assertNull(obj);
    }

    @Override
    public synchronized void start() {
        super.start();

//        try {
//            sleep(5000);//睡个5秒去检测
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }

        Object obj = null;
        obj = queue.poll();
        Assert.assertNull(obj);

        System.gc();   //回收下垃圾先

        Assert.assertNull(weakref.get());
        obj = queue.poll();
        Assert.assertNotNull(obj);
    }


}
